#include <iostream>
#include <string>
#include <vector>

class Student{
  private:
  public:
    std::string name;
    std::string sex;
    std::vector<int> id;
  public:
    Student(){}
    explicit Student(const std::string _name, std::string _sex, std::vector<int> _id):name(_name), sex(_sex), id(_id)
    {}

    explicit Student(const Student& self)
    {
      Student(self.name, self.sex, self.id);
    }

    const Student& operator=(const Student& self)
    {
      this->id = self.id;
      this->name = self.name;
      this->sex = self.sex;
      return *this;
    }
    ~Student(){}
};

void TestStudent()
{
  std::vector<int>({1, 2, 3, 4, 5, 6, 7, 8, 9});
  Student stu1("张三", "男", std::vector<int>({1, 2, 3, 4, 5, 6, 7, 8, 9}));
  Student stu2;
  stu2 = stu1;
  stu2.id[1] = 10;
}

class ID{
  private:
  public:
    //ID(){}
    //void Print()
    //{
    //  _Print();
    //}
    void Print()const
    {
      _Print();
    }

    void _Print()
    {
      std::cout << "non-const" << std::endl;
    }
    void _Print()const
    {
      std::cout << "const" << std::endl;
    }
};

void TestID()
{
  ID id1;
  id1.Print();
  const ID id2;
  id2.Print();
}

int main()
{
  TestID();
  return 0;
}
